import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
import store from '../store/index'
import { getToken } from '@/utils/auth'

import Vue from "vue";
import router from "@/router";
import popMessage from "@/utils/popMessage";
import {doDGUTRedirLogin} from "@/fortendView/api/login";

// 创建axios实例
const service = axios.create({
/*  baseURL: process.env.BASE_API, // api 的 base_url*/
  // baseURL: '/api' ,// api 的 base_url,由于vue.config.js中配置了代理，这里使用/api
  timeout: 10000 // 请求超时时间
})
// request拦截器,每次发送请求前都会发送这个
service.interceptors.request.use(
  config => {
    if (store.getters.token) {
      config.headers['token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
    }else
    {
        // Message({
        //
        //     message: "你未登陆",
        //     type: 'error',
        //     duration: 5 * 1000
        // })
    }
    return config//request无误后返回config
  },
  error => {
    // Do something with request error ，当请求失败的时候触发
      router.push("/404")
    console.log("请求失败"+error) // for debug
    Promise.reject(error)
  }
)

// response 拦截器
service.interceptors.response.use(
  response => {
    /**
     * code为非20000是抛错 可结合自己业务进行修改
     */

    const res = response.data;
    console.log(response.data)
    if (res.code !== 200) {


        if (res.code===7002){
            popMessage(false,res.message,"success");

            window.location.href='/api3/'+res.data.redir;
                        window.open()
            return Promise.reject('error：'+res.message)
        }

        if (res.code===7001){
            popMessage(false,res.message,"success");

/*            window.open()
            window.location.href='/api3/'+res.data.redir;*/
            return Promise.reject('error：'+res.message)
        }



/*        然后再分类判断各种情况*/
      // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
      //   let code=5000
        /*if-start*/
        if (res.code===5000)
        {

            /*用户的token无效，做出需要登陆*/

            MessageBox.confirm(
                '你当前未登陆，请登陆',
                '确定登陆',
                {
                    confirmButtonText: '登录',
                    cancelButtonText: '取消',
                    type: 'warning'
                }
            ).then(() => {

                //好家伙，通信贼好用！！！
                const  emiter = new Vue()
                emiter.$bus.$emit("changeSome",true)


            })
            /*if-end*/
        }else if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
        MessageBox.confirm(
          '你已被登出，可以取消继续留在该页面，或者重新登录',
          '确定登出',
          {
            confirmButtonText: '重新登录',
            cancelButtonText: '取消',
            type: 'warning'
          }
        ).then(() => {
          store.dispatch('FedLogOut').then(() => {
            location.reload() // 为了重新实例化vue-router对象 避免bug
          })
        })
      }
        Message({
            message: res.message,
            type: 'error',
            duration: 5 * 1000
        })//这里拦截判断如果不是为200的，都先提示错误



      // console.log("test 被response拦截器拦截了")
      return Promise.reject('error：'+res.message)
    } else {


      return response//response 成功无误返回里面的data数据
    }
  },
  error => {
    console.log('err' + error) // for debug

      router.push("/404")


    return Promise.reject(error)
  }
)

export default service


/*
Axios 中的params与data的区别

在使用axios时，注意到配置选项中包含params和data两者，以为他们是相同的，实则不然。

因为params是添加到url的请求字符串中的，用于get请求。

而data是添加到请求体（body）中的， 用于post请求。

比如对于下面的get请求：
axios({
    method: "get",
    url: "http://www.tuling123.com/openapi/api?key=20ff1803ff65429b809a310653c9daac",
    params: {
        info: "西安天气"
    },
})



如果我们将params修改为data，显然是不能请求成功的，因为get请求中不存在data这个选项。
1、HTTP请求过程中，get请求：表单参数以name=value&name1=value1的形式附到url的后面；

2、post请求：表单参数是在请求体中，也是name=value&name1=value1的形式在请求体中。
POST表单请求提交时，使用的Content-Type是application/x-www-form-urlencoded，而使用原生AJAX的POST请求如果不指定请求头RequestHeader，默认使用的Content-Type是text/plain;charset=UTF-8。
在html中form的Content-type默认值：Content-type：application/x-www-form-urlencoded
如果使用ajax请求，在请求头中出现 request payload导致参数的方式改变了 ,那么解决办法就是：
headers: {'Content-Type':'application/x-www-form-urlencoded'}
或者使用ajax设置：
$.ajaxSetup({contentType: 'application/x-www-form-urlencoded'});
这样，问题就可以解决。

*/





